package com.saxon.mybatis_plus.AutoGenerator;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.lang.reflect.Array;
import java.util.Arrays;

public class Generator {
    public static void main (String[] args) {
        AutoGenerator mgp = new AutoGenerator ();
        //全局配置
        GlobalConfig gc = new GlobalConfig ();
        gc.setIdType (IdType.ASSIGN_ID);//设置全局唯一ID
        gc.setFileOverride (true);//是否覆盖
        gc.setDateType (DateType.ONLY_DATE);//设置日期格式
        String projectPath = System.getProperty ("user.dir");
        gc.setOutputDir (projectPath + "/src/main/java");
        gc.setAuthor ("saxon");//设置文件作者
        gc.setOpen (false);//完成后是否打开文件夹
        gc.setServiceName ("%sService");
        gc.setSwagger2 (true); //实体属性 Swagger2 注解
        mgp.setGlobalConfig (gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig ();
        dsc.setUrl ("jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8");
        // dsc.setSchemaName("public");
        dsc.setDriverName ("com.mysql.cj.jdbc.Driver");
        dsc.setUsername ("root");
        dsc.setPassword ("123456");
        dsc.setDbType (DbType.MYSQL);
        mgp.setDataSource (dsc);
        // 包配置:设置想要创建的包
        PackageConfig pc = new PackageConfig ();
        pc.setParent ("com.saxon.mybatis_plus");//生成的文件夹就在这个目录下
        // pc.setModuleName ("blog"); //如果设置就会把生成的包放在这个报下
        pc.setEntity ("pojo");//设置实体类的包名
        pc.setMapper ("mapper");//Dao的名字
        pc.setController ("controller");//controller的名字
        pc.setService ("service");//service的名字
        mgp.setPackageInfo (pc);
        // 策略配置
        StrategyConfig strategy = new StrategyConfig ();
        strategy.setNaming (NamingStrategy.underline_to_camel);//下划线变成驼峰
        strategy.setColumnNaming (NamingStrategy.underline_to_camel);//下划线变成驼峰
        // strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");//再创建类的时候加上extends
        strategy.setEntityLombokModel (true);
        strategy.setRestControllerStyle (true);
        // 写于父类中的公共字段
        strategy.setInclude ("user");//设置你要映射的表名
        strategy.setControllerMappingHyphenStyle (true);
        strategy.setLogicDeleteFieldName ("deleted");//设置逻辑删除功能
        strategy.setVersionFieldName ("version");//设置乐观锁插件
        TableFill createTime = new TableFill ("create_time", FieldFill.INSERT);
        TableFill modifyTime = new TableFill ("modify_time", FieldFill.UPDATE);
        strategy.setTableFillList (Arrays.asList (createTime, modifyTime));
        mgp.setStrategy (strategy);
        mgp.execute ();
    }
}
